using UnityEngine;

public class TargetController : MonoBehaviour
{
    [Header("分数区域")]
    public Transform bullseye;      // 50分区（靶心）
    public Transform outerBull;     // 25分区（外环靶心）
    public Transform[] numberZones; // 1-20分区
    public Transform doubleRing;    // 双倍区
    public Transform tripleRing;    // 三倍区
    public Transform outerArea;     // 外圈（不得分）

    // 计算飞镖击中的分数
    public int CalculateScore(Vector3 hitPosition)
    {
        Debug.Log("计算分数: " + hitPosition); // 添加日志
        // 转换为本地坐标
        Vector3 localHit = transform.InverseTransformPoint(hitPosition);
        
        // 计算距离中心的距离
        float distance = Mathf.Sqrt(localHit.x * localHit.x + localHit.y * localHit.y);
        
        // 判断是否击中靶外
        if (distance > outerArea.localScale.x * 0.5f)
            return 0;
        
        // 判断是否击中双倍区或三倍区
        bool isDouble = IsInZone(localHit, doubleRing);
        bool isTriple = IsInZone(localHit, tripleRing);
        
        // 判断击中的数字区域
        int number = GetNumberZone(localHit);
        
        // 计算分数
        if (IsInZone(localHit, bullseye))
            return 50; // 靶心
        
        if (IsInZone(localHit, outerBull))
            return 25; // 外圈靶心
        
        if (isTriple)
            return number * 3; // 三倍区
        
        if (isDouble)
            return number * 2; // 双倍区
        
        return number; // 普通区域
    }
    
    // 判断是否在指定区域内
    private bool IsInZone(Vector3 point, Transform zone)
    {
        float zoneRadius = zone.localScale.x * 0.5f;
        float distance = Mathf.Sqrt(point.x * point.x + point.y * point.y);
        return distance <= zoneRadius;
    }
    
    // 获取击中的数字区域
    private int GetNumberZone(Vector3 point)
    {
        // 计算角度（从正上方开始）
        float angle = Mathf.Atan2(point.x, point.y) * Mathf.Rad2Deg;
        if (angle < 0) angle += 360;
        
        // 将360度分为20个区域
        float segmentAngle = 360f / 20f;
        int segment = Mathf.FloorToInt(angle / segmentAngle);
        
        // 映射到对应的分数（注意：飞镖靶的数字排列不是顺序的）
        int[] dartboardNumbers = {20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5};
        return dartboardNumbers[segment];
    }
}